'use strict';
const path = require('path')

module.exports = appInfo => {
  const config = {};

  // should change to your own
  config.keys = appInfo.name + '_1505355653655_2864';

  // 中间件
  config.middleware = [ 'jwt'];

  // 中间件
  config.security = {
    csrf: {
      enable: false,
    },
  };

  // jwt
  config.jwt = {
    ignore(ctx) {
      var reg = /(\/api)?\/account.*/
      return ctx.path == '/' || reg.test(ctx.path)
    },
    cookie: 'Authorization',
    secret: '123456',
  };

  config.onerror = {
    // all(err, ctx) {
    //   // 在此处定义针对所有响应类型的错误处理方法
    //   // 注意，定义了 config.all 之后，其他错误处理方法不会再生效
    //   ctx.body = 'error';
    //   ctx.status = 500;
    // },
    html(err, ctx) {
      // html hander
      ctx.body = `<h3>${ err }</h3>`;
      ctx.status = 500;
    },
    json(err, ctx) {
      // jwt 身份验证错误
      if (err.status == 401) {
        ctx.status = 401;
      } else {
        ctx.logger.info(`请求发生异常 ${ctx.path}`, err)
      }
      ctx.status = 200;
      ctx.body = {
        success: false,
        message: err && err.message ? err.message : '原因未知',
      };
    },
    jsonp(err, ctx) {
      // 一般来说，不需要特殊针对 jsonp 进行错误定义，jsonp 的错误处理会自动调用 json 错误处理，并包装成 jsonp 的响应格式
    },
  };

  config.static = {
    prefix: '/view/',
    dir: path.join(appInfo.baseDir, 'app/view'),
    // support lazy load
    dynamic: true,
    preload: false,
    buffer: false,
    maxFiles: 1000,
  };

  config.view = {
    defaultViewEngine: 'nunjucks',
    mapping: {
      '.html': 'nunjucks',
    },
  };

  return config;
};
